package ru.niir.goodfil.db;

import ru.niir.goodfil.utils.Pair;

import java.io.Serializable;
import java.util.List;
import java.util.ArrayList;

/**
 * Роль пользователя
 */
public final class Role implements Serializable
{
    /**
     * Администратор
     */
    public static final int ADMIN = 1;

    /**
     * Менеджер
     */
    public static final int MANAGER = 2;

    /**
     * Кладовщик
     */
    public static final int STOREMAN = 3;

    /**
     * Клиент
     */
    public static final int CLIENT = 4;

    /**
     * Касса (только просмотр складкского модуля без доступа к другим ф-ям)
     */
    public static final int KASSA = 5;

    public static String asString(int value)
    {
        switch (value)
        {
            case Role.ADMIN:    return "Администратор";
            case Role.MANAGER:  return "Менеджер";
            case Role.STOREMAN: return "Кладовщик";
            case Role.CLIENT:   return "Клиент";
            case Role.KASSA:    return "Касса";
        }
        return "";
    }

    private static Pair getPair(int value)
    {
        return new Pair(value, asString(value));
    }

    private static Role getRole(int value)
    {
        return new Role(value, asString(value));
    }

    public static List<Pair> list()
    {
        return new ArrayList<Pair>() {{
            add(getPair(Role.ADMIN));
            add(getPair(Role.MANAGER));
            add(getPair(Role.STOREMAN));
            add(getPair(Role.CLIENT));
            add(getPair(Role.KASSA));
        }};
    }

    public static List<Role> listRoles()
    {
        return new ArrayList<Role>() {{
            add(getRole(Role.ADMIN));
            add(getRole(Role.MANAGER));
            add(getRole(Role.STOREMAN));
            add(getRole(Role.CLIENT));
            add(getRole(Role.KASSA));
        }};
    }

    public Role()
    {
    }

    public Role(int id, String name)
    {
        this.id = id;
        this.name = name;
    }

    /**
     * Идентификатор роли
     */
    private int id;

    /**
     * Наименование роли
     */
    private String name;

    public int getId()
    {
        return id;
    }

    public void setId(int id)
    {
        this.id = id;
    }

    public String getName()
    {
        return name;
    }

    public void setName(String name)
    {
        this.name = name;
    }
}
